// utils.js
import {getUserInfo} from "@/api/login";
import {ElMessage} from "element-plus";

const USER_KEY = 'nickname';
const IS_LOGGED_IN_KEY = 'isLoggedIn';
const LAST_LOGIN_TIME_KEY = 'lastLoginTime';
const USER_TOKEN = 'token';
const USER_ROLE = 'role';
const USER_ID = 'id';
const USER_AVATAR = 'avatar';
/**
 * 保存登录状态、用户名和最近一次登录时间戳到SessionStorage中
 * @param {string} token - 用户登录token
 */
export function saveUserLoginStatus(token) {
    sessionStorage.setItem(USER_TOKEN, token);
    sessionStorage.setItem(IS_LOGGED_IN_KEY, 'true');
    const currentTime = new Date().getTime();
    sessionStorage.setItem(LAST_LOGIN_TIME_KEY, currentTime.toString());
    getUserInfo().then(({data}) => {
        sessionStorage.setItem(USER_KEY, data.nickname);
        sessionStorage.setItem(USER_ROLE, data.role);
        sessionStorage.setItem(USER_ID, data.user_id);
        sessionStorage.setItem(USER_AVATAR, data.avatar);
    }).catch(err => {
        ElMessage.error('获取用户信息失败')
        clearUserLoginStatus();
        console.log(err);
    })
}

/**
 * 检查用户最近一次登录是否超过了指定的时间限制
 * @returns {boolean} - 是否超过了时间限制
 */
export function isLastLoginTimeExceeded() {
    const limit = 1000 * 60 * 60 * 24;// 24小时
    const lastLoginTimeStr = sessionStorage.getItem(LAST_LOGIN_TIME_KEY);
    if (!lastLoginTimeStr) {
        // 如果没有保存最近一次登录时间戳，则认为时间已经超过限制
        return true;
    }
    const lastLoginTime = parseInt(lastLoginTimeStr);
    const currentTime = new Date().getTime();
    return (currentTime - lastLoginTime) > limit;
}


/**
 * 获取用户是否已经登录
 * @returns {boolean} - 用户是否已经登录
 */
export function getUserLoginStatus() {
    const token = sessionStorage.getItem(USER_TOKEN);
    if (!token) {
        return false;
    }
    const isLoggedIn = sessionStorage.getItem(IS_LOGGED_IN_KEY);
    const isLastLogin = isLastLoginTimeExceeded();
    if (isLastLogin) {
        // 如果最近一次登录时间超过了限制，则认为用户已经退出登录
        clearUserLoginStatus();
        return false;
    }
    return isLoggedIn && isLoggedIn === 'true';
}

/**
 * 获取当前登录用户的用户名
 * @returns {string} - 当前登录用户的用户名
 */
export function getCurrentUsername() {
    return sessionStorage.getItem(USER_KEY);
}

/**
 * 清除用户登录状态
 */
export function clearUserLoginStatus() {
    sessionStorage.clear();
}

/**
 * 获取用户类型
 * @returns {string} - 用户类型
 */
export function getUserRole() {
    return sessionStorage.getItem(USER_ROLE);
}

/**
 * 获取用户token
 */
export function getUserToken() {
    return sessionStorage.getItem(USER_TOKEN);
}

/**
 * 获取用户名与用户头像
 */
export function getUserInfoObj() {
    return {
        nickname: sessionStorage.getItem(USER_KEY),
        avatar: sessionStorage.getItem(USER_AVATAR)
    }
}
